package lishizheng.demo04;

//静态代理模式

//真实对象和代理对象到实现同一个接口
//代理对象到代理真实对象

//好处：代理对象可以做很多真实对象做不了的事情 ；真实对象专注于自己的事情



public class StaticProxy {
    public static void main(String[] args) {
        You you = new You();
        //Thread代理真实的Runnable接口，
        new Thread(() -> System.out.println("我爱你") ).start();
        new WeddingCompany(you).happyMarry();
    }
}


interface Marry{
    void happyMarry();
}

class  You implements Marry{
    @Override
    public void happyMarry() {
        System.out.println("结婚，超开心");
    }
}


//代理角色
class WeddingCompany implements Marry{

    //代理谁？ 真实目标角色
    private  Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void happyMarry() {
        before();
        this.target.happyMarry();//真实对象
        after();
    }

    private void after() {
        System.out.println("结婚之后收尾款");
    }

    private void before() {
        System.out.println("结婚之前布置现场");
    }
}